package leetcode.editor.cn;
//[11]盛最多水的容器

import arithmetic2.T_011_MaxAreaForContainerWater;

/**
 * @see T_011_MaxAreaForContainerWater
 */
public class ContainerWithMostWater11{
public static void main(String[] args) {
   Solution solution = new ContainerWithMostWater11().new Solution();
   
}

  //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int maxArea(int[] height) {
        /**
         * 思路 o(n)
         * 1 双指针 首尾各1端
         * 2 计算2端之间的area
         * 3 移动，矮的一端，向长的一端，移动，（todo 两端，都是最小值移动，所以不会漏掉 大的区域计算）
         * 4 时间复杂度 On   空间复杂度O1
         *
         * 还是有些疑问，如果l r相等，如何移动？？？
         * 如果下一个值，小，那么没有关系
         * 如果下一个值，大，那么会移动另一边。。over
         *
         * 证明：
         * https://leetcode-cn.com/problems/container-with-most-water/solution/shuang-zhi-zhen-fa-zheng-que-xing-zheng-ming-by-r3/
         * @param height
         * @return
         */
        int area = 0;
        int left = 0;
        int right = height.length-1;
        while (left < right){
            int leftHeight = height[left];
            int rightHeight = height[right];
            //are
            area = Math.max((right - left) * Math.min(leftHeight,rightHeight),area);
            if (leftHeight < rightHeight){
                left ++;
            }else {
                right--;
            }
        }

        return area;

/*
        // O(n^2)
        //h * w
        //1. 枚举所有的值 fori firstline forj secondline O（n^2）
        //     暂不考虑    1 求乘机最大值，边界，>0 ,数组不会超过int ，乘 超过int
        int area = 0;
        for (int i = 0; i < height.length; i++) {
            for (int j = i+1; j < height.length; j++) {
                //getArea
                //int tempArea = getArea(i,j,height);
                int tempArea = (j-i) * Math.min(height[i],height[j]);
                area = Math.max(tempArea,area);
            }
        }
        return area;
*/
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}